package main

import (
	"bytes"
	"context"
	"fmt"
	"os/exec"
	"time"
)

func main() {
	//CommandContext 与 Command 类似，但包含上下文。
	//
	//如果上下文在命令自行完成之前完成，则提供的上下文用于终止进程（通过调用 os.Process.Kill）。

	ctx, cancel := context.WithTimeout(context.Background(), 100*time.Second)
	defer cancel()

	//time.Sleep(5 * time.Microsecond)
	cmd := exec.CommandContext(ctx, "ls", "-al")

	var out bytes.Buffer
	cmd.Stdout = &out

	cmd.Run()
	fmt.Printf("%q", out.String())
}
